1
|
|
|
import {Inject} from '@nestjs/common'; |
2
|
|
|
import { |
3
|
|
|
Leave, |
4
|
|
|
Type |
5
|
|
|
} from '../../HumanResource/Leave/Leave.entity'; |
6
|
|
|
import {Event, EventType} from 'src/Domain/FairCalendar/Event.entity'; |
7
|
|
|
import {IEventRepository} from '../Repository/IEventRepository'; |
8
|
|
|
import {IDateUtils} from 'src/Application/IDateUtils'; |
9
|
|
|
|
10
|
|
|
export class LeaveToEventsConverter { |
11
|
|
|
constructor( |
12
|
|
|
@Inject('IEventRepository') |
13
|
|
|
private readonly eventRepository: IEventRepository, |
14
|
|
|
@Inject('IDateUtils') |
15
|
|
|
private readonly dateUtils: IDateUtils |
16
|
|
|
) {} |
17
|
|
|
|
18
|
|
|
public convert(leave: Leave): void { |
19
|
|
|
const user = leave.getUser(); |
20
|
|
|
const dates = this.dateUtils.getWorkedDaysDuringAPeriod( |
21
|
|
|
new Date(leave.getStartDate()), |
22
|
|
|
new Date(leave.getEndDate()) |
23
|
|
|
); |
24
|
|
|
|
25
|
|
|
if (!dates || 0 === dates.length) { |
26
|
|
|
return; |
27
|
|
|
} |
28
|
|
|
|
29
|
|
|
const firstDate = dates[0].toISOString(); |
30
|
|
|
const lastDate = dates[dates.length - 1].toISOString(); |
31
|
|
|
|
32
|
|
|
for (const date of dates) { |
33
|
|
|
this.eventRepository.save( |
34
|
|
|
new Event( |
35
|
|
|
this.getType(leave), |
36
|
|
|
user, |
37
|
|
|
this.getTime(leave, firstDate, lastDate, date.toISOString()), |
38
|
|
|
date.toISOString() |
39
|
|
|
) |
40
|
|
|
); |
41
|
|
|
} |
42
|
|
|
} |
43
|
|
|
|
44
|
|
|
private getTime( |
45
|
|
|
leave: Leave, |
46
|
|
|
firstDate: string, |
47
|
|
|
lastDate: string, |
48
|
|
|
currentDate: string |
49
|
|
|
): number { |
50
|
|
|
return (firstDate === currentDate && false === leave.isStartsAllDay()) || |
51
|
|
|
(lastDate === currentDate && false === leave.isEndsAllDay()) |
52
|
|
|
? 50 |
53
|
|
|
: 100; |
54
|
|
|
} |
55
|
|
|
|
56
|
|
|
private getType(leave: Leave): EventType { |
57
|
|
|
return leave.getType() === Type.MEDICAL |
58
|
|
|
? EventType.MEDICAL_LEAVE |
59
|
|
|
: EventType.LEAVE; |
60
|
|
|
} |
61
|
|
|
} |
62
|
|
|
|